import { ref, onUnmounted } from 'vue';

/**
 * 一个通用的API轮询Composables
 * @param {Function} apiCallback - 一个返回Promise的API请求函数
 * @param {number} interval - 轮询间隔时间 (毫秒)，默认为5秒
 */
export function usePolling(apiCallback, interval = 5000) {
    const data = ref(null);
    const error = ref(null);
    const isPolling = ref(false);
    let timer = null;

    const poll = async () => {
        try {
            const res = await apiCallback();
            data.value = res.data; // 假设API返回的数据在data属性中
            error.value = null;
        } catch (e) {
            error.value = e;
            console.error('Polling error:', e);
            // 可选择在出错时停止轮询
            // stop();
        }
    };

    const start = () => {
        if (isPolling.value) return; // 防止重复启动
        isPolling.value = true;
        poll(); // 立即执行一次
        timer = setInterval(poll, interval);
    };

    const stop = () => {
        if (!isPolling.value) return;
        isPolling.value = false;
        if (timer) {
            clearInterval(timer);
            timer = null;
        }
    };

    // 组件卸载时自动停止轮询，防止内存泄漏
    onUnmounted(() => {
        stop();
    });

    return {
        data,
        error,
        isPolling,
        start,
        stop,
    };
}